package com.afeng.web.framework.config;


import io.github.yedaxia.apidocs.Docs;
import io.github.yedaxia.apidocs.DocsConfig;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.ConfigurableEnvironment;

import javax.annotation.PostConstruct;


@ConditionalOnClass(io.github.yedaxia.apidocs.DocsConfig.class)
@Configuration
public class JApiDocsConfig {

    @Autowired
    private ConfigurableEnvironment env;

    @Value("${afeng.proFilePath}")
    private String proFilePath;

    @PostConstruct
    public void initJApiDocs() {
        DocsConfig config = new DocsConfig();
        config.setProjectPath(proFilePath); // 项目根目录
        config.setProjectName("quiet"); // 项目名称
        config.setApiVersion("v1");       // 声明该API的版本
        config.setDocsPath(proFilePath + "docs/api"); // 生成API 文档所在目录
        String[] pros = env.getActiveProfiles();
        boolean isDev = false;
        for (String pro : pros) {
            if ("dev".equals(pro)) {
                isDev = true;
                break;
            }
        }
        config.setAutoGenerate(isDev);  // 配置自动生成
        Docs.buildHtmlDocs(config); // 执行生成文档
    }

    /*
    https://japidocs.agilestudio.cn/#/zh-cn/?id=apidoc
     * 标签	说明
@author	作者标识
@version	版本号
@date 日期
@description 描述
@return	对函数返回值的描述
@deprecated	标识过期API（为了保证兼容性，仍可用，但不推荐用）
@throws	构造函数或方法会抛出的异常
@exception	同@throws
@see	引用，查看相关的内容，如类，方法，变量等，必须顶头写
{@link 包.类#成员}	引用，同@see，但可写在任意位置
{@value}	对常量注释，如果其值包含在文档中，通过改标签引用常量的值
{@code}}	{@code text}将文本标记为code，会被解析成text} ,在Javadoc成只要涉及到类名或者方法名，都需要使用@code进行标记
@param	说明方法的参数
@inheritDoc	用于继承父类中的Javadoc，父类的文档注释，被继承到了子类
@parameter 参数及其意义
@since 最早使用该方法/类/接口的JDK版本
@override 重写


JApiDocs 默认只导出声明了@ApiDoc的接口，我们前面通过设置 config.setAutoGenerate(Boolean.TRUE) 来解除了这个限制。
如果你不希望把所有的接口都导出，你可以把config.setAutoGenerate(Boolean.FALSE)，在相关Controller类或者接口方法上通过添加@ApiDoc来确定哪些接口需要导出
stringResult：返回字符串，在返回结果比较简单，而不想创建一个专门的返回类，则可以考虑使用这个属性。
@ApiDoc(stringResult = "{code: 0, data: 'success'}")
@ApiDoc(result = AdminVO.class, url = "/api/v1/admin/login2", method = "post")
你只需要在Controller类/方法/实体字段上添加@Ignore即可，忽略创建
     */

}
